package com.itbaizhan.dao;

import com.itbaizhan.domain.Student;

/*使用Spring实现IOC*/
public class StudentDaoImpl implements StudentDao{
    // 假如类没有空参构造方法，将无法完成bean的创建
    //有参的构造方法  Spring可以调用工厂类的方法创建bean：
    /*public StudentDaoImpl(int a){}*/



    /*测试无参的构造方法*/
    @Override
    public Student findById(int id) {

        return new Student(1,"程序员","北京");
    }
}

/*Spring会帮助我们创建bean，那么它底层是调用什么方法进行创建的呢？

使用构造方法
Spring默认使用类的空参构造方法创建bean：

// 假如类没有空参构造方法，将无法完成bean的创建
public class StudentDaoImpl implements StudentDao{
  public StudentDaoImpl(int a){}

  @Override
  public Student findById(int id) {
    // 模拟根据id查询学生
    return new Student(1,"百战程序员","北京");
   }
}
使用工厂类的方法
Spring可以调用工厂类的方法创建bean：

创建工厂类，工厂类提供创建对象的方法：

public class StudentDaoFactory {
  public StudentDao getStudentDao(){
    return new StudentDaoImpl(1);
   }
}
在配置文件中配置创建bean的方式为工厂方式。

<!--  id：工厂对象的id，class：工厂类  -->
<bean id="studentDaoFactory" class="com.itbaizhan.dao.StudentDaoFactory"></bean>
<!--  id：bean对象的id，factory-bean：工厂对象的id，factory-method：工厂方法 -->
<bean id="studentDao" factory-bean="studentDaoFactory" factory-method="getStudentDao"></bean>
测试

使用工厂类的静态方法
Spring可以调用工厂类的静态方法创建bean：

创建工厂类，工厂提供创建对象的静态方法。

public class StudentDaoFactory2 {
  public static StudentDao getStudentDao2() {
    return new StudentDaoImpl();
   }
}
在配置文件中配置创建bean的方式为工厂静态方法。

<!-- id:bean的id  class:工厂全类名 factory-method:工厂静态方法  -->
<bean id="studentDao" class="com.itbaizhan.dao.StudentDaoFactory2" factory-method="getStudentDao2"></bean>*/